const puppeteer = require('puppeteer');
var $ = require('cheerio')
const chalk = require('chalk')
const log = console.log
const config = require('./config')
var pickMetaDatas = config.pickMetaData
const saveUtil = require('./saveImg')
const width = 1800
const height = 1024


    ; (async () => {

        console.log('开始访问');
        // 启动一个浏览器
        const browser = await puppeteer.launch({
            // defaultViewport : { 'width' : width,'height' : height },
            args: ['--no-sandbox'],
            dumpio: false,
            headless: false //打开chrome可视化窗口 true是不打开 false是打开
        });
        console.log('打开一个新tab页面')
        // 开启一个新页面(await browser.pages()官网写法默认两个tab，操作第二个tab页)
        const page = (await browser.pages())[0];



        // const page = await browser.newPage();

        // page.setDefaultNavigationTimeout( 90000 );

        await page.setViewport({
            width: 1773,
            height: 903
        });

        // await page.setUserAgent( 'UA-TEST' );


        console.log('访问要抓取资源的网站：', config.url)
        await page.goto(config.url, {
            waitUntil: 'networkidle2',  // 网络空闲说明已加载完毕
            // waitUntil: 'domcontentloaded' // 当dom节点已经加载完毕
        });

        // 等待页面滚动完毕，这里设置的是固定的时间间隔，之前使用过page.waitForNavigation()，但是因为等待的时间过久导致报错（Puppeteer默认的请求超时是30s,可以修改）,因为这个页面总有一些不需要的资源要加载，而我的网络最近日了狗，会导致超时，因此我设定等待2.5s就够了
        await page.waitFor(5000) // 等待登录弹窗显示
        console.log('等待5秒完毕，开始进行登录弹窗的获取')
        // 获取html页面内容
        const html = await page.content();
        // const loadMore = $('.page.next', html);
        var iFrames = (await page.frames())
        // var loginFrame = iFrames[5]

        // console.log(loginFrame)
        // var loginIput = await loginFrame.waitFor('input[name="TPL_username"]');//等待用户名输入框出现
        // console.log(loginIput)
        // await loginIput.type('input[name="TPL_username"]','淘大宝211314');//输入账户
        iFrames.forEach(async (item, idx) => {

            console.log(`******************************************`)
            console.log(`******************************************`)
            
            console.log(`********第${idx}个iframe框**获取登录页面******`)
            var loginFrame = item
            var loginIput = await loginFrame.waitFor('input[name="TPL_username"]');//等待用户名输入框出现
            // console.log(loginIput)
            await loginIput.type('淘大宝211314');//输入账户
            var loginPwd = await loginFrame.waitFor('input[name="TPL_password"]');//等待用户名输入框出现
            // console.log(loginPwd)
            await loginPwd.type('bao');//输入账户
            await page.waitFor(2000);
            // 获取滑块元素
            var slideBtn = await loginFrame.waitFor('.nc_iconfont.btn_slide');
            const size = await slideBtn.boundingBox();//使用boundingBox函数得到元素的尺寸信息
            await page.mouse.move(size.x, size.y);//移动到滑块的的位置上方
            await page.mouse.down();//按下鼠标
            await page.waitFor(200);
            await page.mouse.move(1000, size.y, {steps:100});//向右移动滑块，y坐标不变，x坐标取值1000
            await page.mouse.up();//松开鼠标
            // await page.waitFor(1000);

            var loginBtn = await loginFrame.waitFor('.J_Submit');
            // console.log(loginBtn)
            loginBtn.click()
            console.log(`******************************************`)
            console.log(`******************************************`)
            
            J_Submit
        })


        var loginFlag = false
        var tryCount = 0
        while(loginFlag){
            let pageInput4uname = await page.$(`input[name="TPL_username"]`) // 淘宝账号
            console.log('淘宝登录输入框：用户名-',pageInput4uname)
            if(pageInput4uname){ // 为空，则没有弹出登录框
                let pageInput4pwd = await page.$(`input[name="TPL_password"]`) // 淘宝账号
                pageInput4uname.type('淘大宝211314')
                pageInput4pwd.type('bao521')
                loginFlag = false
            }
            tryCount ++ 
            if(tryCount === 100){
                break;
            }
           
        }
        // 关闭浏览器
        //   browser.close();
    })();


